// 封装一个倒计时的逻辑函数

/**
 * 实现步骤：
 * 1.先实现函数的结构，不管具体的逻辑
 * 2.分析核心思路，确定解决问题的关键步骤
 * 3.根据关键步骤，逐个解决问题
 *
 * 核心思路: 每隔1s time--
 * 解决方法: 定时器 time--  -> 使用vueuse提供的函数
 */

import { computed, ref, onUnmounted } from 'vue'
import { useIntervalFn } from '@vueuse/core'
import dayjs from 'dayjs'

function useCountDown () {
  // 倒计时数据
  const time = ref(0)
  const formatTime = computed(() => {
    return dayjs.unix(time.value).format('mm分ss秒')
  })

  // 倒计时函数
  // pause 暂停函数,用来暂停重复执行的逻辑;resume继续函数,用来开始执行重复的逻辑;
  // 回调函数里,用来放每隔1s钟进行的逻辑
  const { pause, resume } = useIntervalFn(() => {
    /* your function */
    // 我们使用pause方法,停止定时器的执行,整个回调函数都不会执行
    // 如果使用return的写法,只能控制--逻辑不执行,但是回调还是会不断执行
    if (time.value === 1) {
      pause()
    }
    time.value--
  }, 1000)

  // 开始倒计时方法
  function start (count) {
    // 初始化赋值
    time.value = count
    // 再开始
    resume()
  }

  // 停止倒计时方法
  function stop () {
    pause()
  }

  // 组件卸载时停止
  onUnmounted(() => {
    pause()
  })

  return {
    time,
    start,
    stop,
    formatTime
  }
}

export default useCountDown
